package entity

import (
	"database/sql"
	"encoding/json"
	"time"
)

// NullTime 表示一个可以为 NULL 的时间
type NullTime struct {
	sql.NullTime
}

// MarshalJSON 实现 json.Marshaler 接口
func (nt *NullTime) MarshalJSON() ([]byte, error) {
	if !nt.Valid {
		return []byte("null"), nil
	}
	return json.Marshal(nt.Time)
}

// UnmarshalJSON 实现 json.Unmarshaler 接口
func (nt *NullTime) UnmarshalJSON(data []byte) error {
	var t time.Time
	if string(data) == "null" {
		nt.Time = t
		nt.Valid = false
		return nil
	}
	if err := json.Unmarshal(data, &t); err != nil {
		return err
	}
	nt.Time = t
	nt.Valid = true
	return nil
}

// FormatDate 返回日期部分
func (nt *NullTime) FormatDate() string {
	if !nt.Valid {
		return ""
	}
	return nt.Time.Format("2006-01-02")
}
